//Dados para Conexao com o Banco

unit uConfiguracao;

interface

uses uConstantesSistema, uMensagensSistema, uConexao, IniFiles, Forms, Windows;

type TBancoDeDados = class
      private
        {private declarations}
      public
        {public declarations}
        function retornarConexao(): TConexao;
     end;

type TProdutoConfig = class
      private
       function getDirImagem: string;

       procedure setDirImagem(const value: string);
      public
       property dirImagem : string read getDirImagem write setDirImagem;
     end;

type TConfiguracao = class
      private
        {private declarations}
        fBancoDeDados     : TBancoDeDados;
        fproduto          : TProdutoConfig;

        function getBancoDeDados: TBancoDeDados;
        function getProduto: TProdutoConfig;

        procedure setBancoDeDados(const value: TBancoDeDados);
        procedure setProduto(const value: TProdutoConfig);
      public
        {public declarations}
        constructor create(); virtual;
        destructor destroy(); virtual;

        property BancoDeDados     : TBancoDeDados   read getBancoDeDados     write setBancoDeDados;
        property Produto          : TProdutoConfig  read getProduto          write setProduto;
     end;



     function configuracao(): TConfiguracao;

implementation

uses
  SysUtils, uMensagemConstante, uFuncoes, Classes;

var
  mConfiguracao    : TConfiguracao = nil;
  IniConfiguracao  : TIniFile;
  JaExibiuMensagem : boolean;

function configuracao: TConfiguracao;
begin
   if not Assigned(mConfiguracao) then
    mConfiguracao := TConfiguracao.Create;
   result := mConfiguracao;
end;

{ TConfiguracao }

constructor TConfiguracao.create;
begin
   inherited create;
   fBancoDeDados    := TBancoDeDados.Create;
   JaExibiuMensagem := False;
end;

destructor TConfiguracao.destroy;
begin
   if assigned(BancoDeDados) then
    FreeAndNil(fBancoDeDados);
end;

function TConfiguracao.getBancoDeDados: TBancoDeDados;
begin
   result := fBancoDeDados;
end;

function TConfiguracao.getProduto: TProdutoConfig;
begin
  Result :=  fproduto;
end;

procedure TConfiguracao.setBancoDeDados(const value: TBancoDeDados);
begin
   fBancoDeDados := value;
end;

procedure TConfiguracao.setProduto(const value: TProdutoConfig);
begin
  fproduto := value;
end;

{ TBancoDeDados }

function TBancoDeDados.retornarConexao: TConexao;
begin
   try
      result           := TConexao.Create;

      result.servidor  := servidorPadrao;
      result.banco     := bancoPadrao;
      result.porta     := StrToInt(portaPadrao);
      result.usuario   := usuarioPadrao;
      result.senha     := senhaPadrao;

   except on e: exception do
    begin
       result := nil;
       MensagemErro(MsgArqIniConexao);
    end;
   end;
end;

{ TProdutoConfig }

function TProdutoConfig.getDirImagem: string;
begin
  try
      result := '';
      if not FileExists(ArquivoConfiguracao()) and not JaExibiuMensagem then
       begin
          MensagemAviso(MsgArqIniInvalido);
          JaExibiuMensagem := True;
       end
      else if FileExists(ArquivoConfiguracao()) then
       begin
          try
            JaExibiuMensagem := False;

            IniConfiguracao  := TIniFile.Create(ArquivoConfiguracao());
            result           := IniConfiguracao.ReadString('PRODUTO','DIRIMAGEM',ApplicationPath+'produto\');

            if not DirectoryExists(result) then
             CreateDir(result);
           finally
            if assigned(IniConfiguracao) then
             FreeAndNil(IniConfiguracao);
          end;
       end;
   except on e: exception do
    begin
       result := '';
       MensagemErro(MsgArqIniConexao);
    end;
   end;
end;

procedure TProdutoConfig.setDirImagem(const value: string);
begin
   try
    if not FileExists(ArquivoConfiguracao()) and not JaExibiuMensagem then
     begin
        MensagemAviso(MsgArqIniInvalido);
        JaExibiuMensagem := True;
     end
    else if FileExists(ArquivoConfiguracao()) then
     begin
        try
          JaExibiuMensagem := False;

          IniConfiguracao  := TIniFile.Create(ArquivoConfiguracao());
          IniConfiguracao.WriteString('PRODUTO','DIRIMAGEM',value);
         finally
          if assigned(IniConfiguracao) then
           FreeAndNil(IniConfiguracao);
        end;
     end;
   except on e: exception do
    begin
       MensagemErro(MsgArqIniConexao);
    end;
   end;
end;

initialization

finalization
  mConfiguracao := nil;

end.
